'''此文件为银行流水清单旧的格式。
'''
import pandas as pd

class FinaceType_2():
    name = 'finace_t2'
    def detect(data):
        '''判断是否特殊格式类型。
        return (是否为特殊格式,标题所在行位置)
        ''' 
        if any(data[data=='甘肃省农村信用合作社代理业务成功清单']):
            used_rows = 10 if data.shape[0] > 10 else data.shape[0]
            for i in range(used_rows):
                item = data.iloc[i, :].fillna('none')
                if item.tolist() == ['序号', '账号', '卡号', 'none', '姓名', '用户号', '证件号', 'none', '金额',
                                     '交易状态', '失败信息', 'none']:
                    return True,i
        return False,None

    def detect_after_unification(data):
        '''识别前面unification处理后特殊格式类型。
        return 是否为特殊格式
        '''
        if any(data[data=='甘肃省农村信用合作社代理业务成功清单']):
                    return True
        return False
    
    def unification(data):
        '''当检测为特殊格式时进行统一化处理。
        data为检测所用的头部数据
        '''
        special_date,coord_date = FinaceType_2.detect(data)
        if not special_date:
            raise RuntimeError('当前data中的数据不满足finace_t2格式！')
        count = 0
        for col_i, item in enumerate(data.iloc[coord_date, :].astype('str')):
            if pd.isnull(item):
                print("unname:{}".format(count))
                data.iloc[coord_date, col_i] = "unname:{}".format(count)
                count += 1
       
    def findLedger(data,file_info):
        '''从头部数据中，查找出附加信息。
        data:通过walkExcelHeaders以此函数进行回调时传入的数据文件的头部数据。
        file_info：此文件在myexcel.findUseColumns中列使用配置后生成的每行数据。
        '''
        special_date = FinaceType_2.detect_after_unification(data)
        if not special_date:
            raise RuntimeError('当前data中的数据不满足finace_t2格式！')

        file_date = None

        used_rows = 10 if data.shape[0] > 10 else data.shape[0]
        tmp = data.iloc[:used_rows, :]
        for _, line in tmp.iterrows():
            find = line.str.match('入账日期：(.*)').astype('boolean')
            if any(find.fillna(False)):
                item = line[find.fillna(False)]
                file_date = item.values[0].replace("入账日期：","")
                break

        return {'文件编号':file_info['文件编号'],'入账日期':file_date}